package com.ruoyi.common.core.xss;


import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义xss校验注解
 * xss 攻击 https://blog.csdn.net/weixin_47450807/article/details/123207164
 *
 * @author ruoyi
 */

/**
 * 用于标记需要进行跨站脚本攻击（XSS）验证的元素。具体解释如下：
 *
 * - @Retention(RetentionPolicy.RUNTIME)：指定该注解在运行时可以通过反射获取到。
 * - @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})：指定该注解可以用于标记在方法、字段、构造函数和参数上。
 * - @Constraint(validatedBy = {XssValidator.class})：指定该注解需要使用XssValidator类进行验证。
 *
 * 这段代码的作用是定义一个自定义注解，用于在运行时标记需要进行XSS验证的元素，并指定了XssValidator类来进行验证。通过在需要进行XSS验证的地方使用该注解，可以方便地对输入内容进行XSS验证。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Constraint(validatedBy = {XssValidator.class})
// 用于定义一个自定义的验证器。@Constraint指定了该验证器的实现类为XssValidator.class。在使用该注解时，会调用XssValidator类中的逻辑来进行数据验证。通常这种自定义验证器用于对输入数据进行特定的验证，比如防止XSS攻击等。
public @interface Xss {
    String message() default "不允许任何运行脚本";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
